package com.quickly.develop.common.crud;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.quickly.develop.common.base.BaseDao;
import com.quickly.develop.common.crud.DataEntity;
/**
 * DAO支持类实现
 * 
 * @Author: quyunde
 * @Date: 2020-05-10
 * @param <T>
 */

public interface CrudDao<T> extends BaseDao<DataEntity>{
	
	/**
	 * 获取单条数据，主键UUID
	 * 
	 * @param id
	 * @return
	 */
	 T get(String id);
	/**
	 * 获取单条数据，主键Long自增长
	 * 
	 * @param id
	 * @return
	 */
	 T get(Long id);

	/**
	 * 获取单条数据，条件查询
	 * 
	 * @param entity
	 * @return
	 */
	 T get(T entity);
	
	/**
	 * 保存一条
	 * @param entity
	 * @return
	 */
	int save(T entity);
	/**
	 * 保存多条
	 * @param entity
	 * @return
	 */
	int saveList(List<T> list);
	/**
	 * 修改一条
	 * @param entity
	 * @return
	 */
	int update(T entity);
	/**
	 * 修改多条
	 * @param entity
	 * @return
	 */
	int updateList(List<T> list);
	
	/**
	 * 删除一条，主键UUID
	 * @param entity
	 * @return
	 */
	int delete(String id);
	
	/**
	 * 删除一条，主键Long自增长
	 * @param entity
	 * @return
	 */
	int delete(Long id);

	/**
	 * 删除,条件删除
	 * @param entity
	 * @return
	 */
	int delete(T entity);
	
	/**
	 * 删除多条
	 * @param entity
	 * @return
	 */
	int deleteList(List<T> list);
	

	/**
	 * 查询总数
	 * @param entity
	 * @return
	 */
	int countByEntity(T entity);

	/**
	 * 查询数据列表，设置分页;
	 * @param entity
	 * @param offset
	 * @param limit
	 * @return
	 */
	List<T> queryPageByEntity(@Param("entity")T entity, @Param("offset")Integer offset, @Param("limit")Integer limit);

	/**
	 * 查询数据列表，设置所有;
	 * @param entity
	 * @return
	 */
	List<T> queryAllByEntity(T entity);

	/**
	 * 查询总数
	 * 
	 * @param entity
	 * @return
	 */
	public int countAllByMap(Map<String, Object> params);
	/**
	 * 查询数据列表，如果需要分页，请设置分页对象;
	 * 
	 * @param entity
	 * @return
	 */
	public List<T> queryPageByMap(@Param("params") Map<String, Object> params, @Param("offset") Integer offset,
			@Param("limit") Integer limit);

	/**
	 * 查询所有数据列表
	 * 
	 * @param entity
	 * @return
	 */
	public List<T> queryAllByMap(@Param("params") Map<String, Object> params);

	



	

}